home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagg_m.zip / MEMORY.SWG / 0025_Shrink-Expand the Heap.pas < prev    next >
Pascal/Delphi Source File  |  1993-08-27  |  1KB  |  33 lines

  1. {
  2. KENT BRIGGS
  3.  
  4. Here is what I came up with regarding my problem of needing a large
  5. heap (temporarily) and needing memory for an EXEC routine:
  6. }
  7.  
  8. procedure heap_shrink;    {free up all unused heap}
  9. begin
  10.   reg.bx := memw[seg(heapptr) : ofs(heapptr) + 2] - prefixseg;
  11.   reg.es := prefixseg;
  12.   reg.ah := $4a;            {dos memory alloc. interrupt}
  13.   msdos(reg);
  14. end;
  15.  
  16. procedure heap_expand;    {reclaim unused heap}
  17. begin
  18.   reg.bx := memw[seg(heapend) : ofs(heapend) + 2] - prefixseg;
  19.   reg.es := prefixseg;
  20.   reg.ah := $4a;
  21.   msdos(reg);
  22. end;
  23.  
  24. {
  25. Leave the default heapmax at 655360.  Dispose of all temporary pointers
  26. and call heap_shrink right before exec(my_prgm) and heap_expand right
  27. after.  The memw's get the segment addresses for the heapend and heapptr
  28. variables (see memory map in manual).  Subtract the PSP segment and that
  29. gets you the number of paragraphs (16 byte blocks) to allocate.
  30.  
  31. Anyone see any dangers with this scheme?  I instantly freed up 110K for
  32. DOS shells in my application.  No problems so far.
  33. }